/*
Copyright (c) [2019年5月1日] [吴超]
[MBT_Studio] is licensed under Mulan PSL v2.
You can use this software according to the terms and conditions of the Mulan PSL v2.
You may obtain a copy of Mulan PSL v2 at:
		 http://license.coscl.org.cn/MulanPSL2
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
See the Mulan PSL v2 for more details.
*/
#pragma once

#include "框架/工作区/节点构建.h"


C_节点面板* f_节点构建_单值计算(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr);
void		f_节点重置_单值计算(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_单目计算(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr);
void		f_节点重置_单目计算(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_位运算(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr);
void		f_节点重置_位运算(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_累计计算(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr);
void		f_节点重置_累计计算(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_回写节点(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr);
void		f_节点重置_回写节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_逻辑计算节点(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr);
void		f_节点重置_逻辑计算节点(C_节点面板* plane, C_节点基类* node);


C_节点面板* f_节点构建_矢量计算(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr);
void		f_节点重置_矢量计算(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_三角函数计算(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr);
void		f_节点重置_三角函数计算(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_归一化计算(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr);
void		f_节点重置_归一化计算(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_几何计算(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr);
void		f_节点重置_几何计算(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_两向量标量计算(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr);
void		f_节点重置_两向量标量计算(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_合并XYZ(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr);
void		f_节点重置_合并XYZ(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_分离XYZ(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr);
void		f_节点重置_分离XYZ(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_混合(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr);
void		f_节点重置_混合(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_设置矢量分量(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr);
void		f_节点重置_设置矢量分量(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_矩阵变换(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr);
void		f_节点重置_矩阵变换(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_矩阵计算(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr);
void		f_节点重置_矩阵计算(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_矩阵转换(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr);
void		f_节点重置_矩阵转换(C_节点面板* plane, C_节点基类* node);

//C_节点面板* f_节点构建_顶点变换(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr);
//void		f_节点重置_顶点变换(C_节点面板* plane, C_节点基类* node);


C_节点面板* f_节点构建_射线相交(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr);
void		f_节点重置_射线相交(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_向量转四元数(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr);
void		f_节点重置_向量转四元数(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_向量长度(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr);
void		f_节点重置_向量长度(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_四元数计算(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr);
void		f_节点重置_四元数计算(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_四元数变换(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr);
void		f_节点重置_四元数变换(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_向量角度组成四元数(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr);
void		f_节点重置_向量角度组成四元数(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_四元数转换为欧拉角(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr);
void		f_节点重置_四元数转换为欧拉角(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_四元数转换为矩阵节点(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr);
void		f_节点重置_四元数转换为矩阵节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_旋转向量节点(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr);
void		f_节点重置_旋转向量节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_轴向旋转向量节点(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr);
void		f_节点重置_轴向旋转向量节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_顶点变换(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr);
void		f_节点重置_顶点变换(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_平面到点节点(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr);
void		f_节点重置_平面到点节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_坐标转索引节点(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr);
void		f_节点重置_坐标转索引节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_索引转坐标节点(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr);
void		f_节点重置_索引转坐标节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_平面线段相交节点(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr);
void		f_节点重置_平面线段相交节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_圆坐标生成节点(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr);
void		f_节点重置_圆坐标生成节点(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_直线(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr);
void		f_节点重置_直线(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_步进计算节点(S_UI创建环境& ctx, S_设备环境& ctx_3d, C_节点基类* node, C_节点树* tree = nullptr);
void		f_节点重置_步进计算节点(C_节点面板* plane, C_节点基类* node);


C_节点面板* f_节点构建_点集约束到变换(S_UI创建环境& ctx, S_设备环境& dev_ctx, C_节点基类* node, C_节点树* tree = nullptr);
void		f_节点重置_点集约束到变换(C_节点面板* plane, C_节点基类* node);



C_节点面板* f_节点构建_渐变采样(S_UI创建环境& ctx, S_设备环境& dev_ctx, C_节点基类* node, C_节点树* tree = nullptr);
void		f_节点重置_渐变采样(C_节点面板* plane, C_节点基类* node);

C_节点面板* f_节点构建_绕点旋转(S_UI创建环境& ctx, S_设备环境& dev_ctx, C_节点基类* node, C_节点树* tree = nullptr);
void		f_节点重置_绕点旋转(C_节点面板* plane, C_节点基类* node);


bool f_计算节点重构(C_节点面板** plane, C_节点基类* node, S_UI创建环境* ctx);